package br.com.itc;

/**
*
* @author Ricardo Levindo
* 
* */

public class Pda {

	String cadeia = "";

	public Pda(String argumento) {
		this.cadeia = argumento;
	}

	public boolean verifica() {
		Fita t;
		Pilha p;
		boolean aceitacao = false;
		int Estado = 0;

		if (this.cadeia == "") {
			System.out.println("Execute: AutomatoPDA <cadeia>");
		} else {
			t = new Fita(this.cadeia);
			p = new Pilha(this.cadeia.length());

			char simbolo = 'x';

			while (true) {
				simbolo = t.read();

				if (Estado == 0) {
					p.push(simbolo);
					Estado = 1;

				} else if (Estado == 1) {
					if (simbolo == '0') {
						if (p.peek() == '1') {
							p.pop();
						} else {
							p.push('0');
						}
					} else if (simbolo == '1') {
						if (p.peek() == '0') {
							p.pop();
						} else {
							p.push('1');
						}
					} else if (p.peek() == '1') {
						p.pop();
						Estado = 2;
						continue;
					}

					if (simbolo == '$') {
						if (p.peek() == '1') {
							Estado = 2;
						} else {
							aceitacao = false;
							break;
						}
					}

				} else if (Estado == 2) {
					if (p.peek() == '1') {
						p.pop();
					} else if (p.peek() == '$') {
						p.pop();
						Estado = 3;
						aceitacao = true;
						break;
					}
				}

			}
		}
		return aceitacao;
	}
}
